// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import PageTitle from '@/components/PageTitle';
import FastClick from 'fastclick';
import Cookies from 'js-cookie';
import Vue from 'vue';
import { AlertPlugin, ConfirmPlugin, LoadingPlugin, ToastPlugin } from 'vux';
import App from './App';
// 全局vue filter
import * as filters from './config/filter';
// router.afterEach(() => {});
import './config/rem';
import './plugin/jQueryRotate';
import './plugin/snowflake';
import router from './router';
// 全局自定义的css样式
import './styles/theme-dark.scss';

Vue.component('PageTitle', PageTitle)
// 处理移动端click延迟300ms
FastClick.attach(document.body)
Vue.config.productionTip = false


// 注册全局filter.
Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key])
});

Vue.use(ToastPlugin)
Vue.use(AlertPlugin)
Vue.use(ConfirmPlugin)
Vue.use(LoadingPlugin)


import VueAMap from 'vue-amap';
Vue.use(VueAMap);
// 初始化vue-amap
VueAMap.initAMapApiLoader({
  // 高德key
  key: 'f41366406f9d5eace08fd4a6ae88a884',
  // 插件集合 （插件按需引入）
  plugin: [
    // 'AMap.Autocomplete',
    // 'AMap.PlaceSearch',
    // 'AMap.Scale',
    // 'AMap.OverView',
    // 'AMap.ToolBar',
    // 'AMap.MapType',
    // 'AMap.PolyEditor',
    // 'AMap.Driving',
    // 'AMap.Transfer',
    // 'AMap.Walking',
    'AMap.Geolocation'
  ]
});



/**
 * 同步并执行微信相关分享
 * @param {基础参数} config 
 * @param {分享参数} shareParams 
 * @param {分享成功后回调函数} callBack 
 */
Vue.prototype.wxShareSync = function (config, shareParams, callBack) {
  // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，
  wx.config({
    beta: true,// 必须这么写，否则wx.invoke调用形式的jsapi会有问题
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
    appId: config.appId, // 必填，公众号的唯一标识
    timestamp: config.timestamp, // 必填，生成签名的时间戳
    nonceStr: config.nonceStr, // 必填，生成签名的随机串
    signature: config.signature, // 必填，签名，见附录1
    jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'onMenuShareWechat', 'updateAppMessageShareData', 'updateTimelineShareData'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
  });
  wx.ready(() => {
    // 所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，
    // 则可以直接调用，不需要放在ready函数中。

    // 获取“转发”按钮点击状态及自定义分享内容接口
    wx.onMenuShareAppMessage({
      title: shareParams.title, // 分享标题
      desc: shareParams.desc, // 分享描述
      link: config.shareUrl, // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl: shareParams.imgUrl, // 分享图标
      // 用户确认分享后执行的回调函数
      success: function () {
        callBack(7)
      },
      // 用户取消分享后执行的回调函数
      cancel: function () {
        console.log('分享到朋友取消');
      }
    });
    // 获取“微信”按钮点击状态及自定义分享内容接口
    wx.onMenuShareWechat({
      title: shareParams.title, // 分享标题
      desc: shareParams.desc, // 分享描述
      link: config.shareUrl, // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl: shareParams.imgUrl, // 分享图标
      success: function () {
        callBack(7)
      },
      cancel: function () {
        // 用户取消分享后执行的回调函数
      }
    });
    //分享到朋友圈
    wx.onMenuShareTimeline({
      title: shareParams.title, // 分享标题
      desc: shareParams.desc, // 分享描述
      link: config.shareUrl, // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl: shareParams.imgUrl, // 分享图标
      // 用户确认分享后执行的回调函数
      success: function () {
        callBack(8)
      },
      // 用户取消分享后执行的回调函数
      cancel: function () {
        console.log('分享到朋友圈取消');
      }
    });

    // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容（1.4.0）
    wx.updateAppMessageShareData({
      title: shareParams.title, // 分享标题
      desc: shareParams.desc, // 分享描述
      link: config.shareUrl + '&shareType=7', // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl: shareParams.imgUrl, // 分享图标
      success: function () {
        // 设置成功
      },
    })

    // 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容（1.4.0）
    wx.updateTimelineShareData({
      title: shareParams.title, // 分享标题
      link: config.shareUrl + '&shareType=8', // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl: shareParams.imgUrl, // 分享图标
      success: function () {
        // 设置成功
      }
    })


  });
  wx.error(function (res) {
    // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
    console.log(res)
  });
};

function is_weixn() {
  var ua = navigator.userAgent.toLowerCase();
  if (ua.match(/MicroMessenger/i) == "micromessenger") {
    return true;
  } else {
    return false;
  }
}

function is_workweixn() {
  var ua = navigator.userAgent.toLowerCase();
  if (ua.match(/MicroMessenger/i) == "micromessenger" && ua.indexOf('wxwork') != -1) {
    return true;
  } else {
    return false;
  }
}

function getQV(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) { return pair[1]; }
  }
  return '';
}

// 拦截路由进行授权
router.beforeEach((to, from, next) => {
  // if (location.search) {
  //   if (location.search.indexOf('wxsb') == -1) {
  //     // 有参数
  //     location.search += "&wxsb=" + +new Date()
  //     return
  //   } else {
  //     if (!getQV('isflush') && to.path != '/activity' && to.fullPath.indexOf('wwuid') != -1) {
  //       let wxsb = getQV('wxsb')
  //       location.href = process.env.HOST_WECHAT_WEB + '/' + location.search.replace(wxsb, +new Date()) + '&isflush=1' + '#' + to.fullPath
  //       // location.search = location.search.replace(wxsb, +new Date()) + '&isflush=1'
  //       return
  //     }
  //   }
  // } else {
  //   location.search += "?wxsb=" + +new Date()
  //   return
  // }


  if (to.path == '/') {
    if (is_weixn()) {
      setInterval(() => {
        WeixinJSBridge.call('closeWindow')
      }, 10)
    }
    next(false)
  } else {
    if (!to.query.eid) {
      to.query.eid = from.query.eid
    }
    if (!to.query.waid) {
      to.query.waid = from.query.waid
    }
    // if (Cookies.get('eid') && to.query.eid != Cookies.get('eid')) {
    //   Cookies.remove('wwuid')
    //   Cookies.remove('eid')
    // }
    if (!to.query.wwuid) {
      //先取cookie中的wwuid
      // to.query.wwuid = Cookies.get('wwuid')
      if (!to.query.wwuid) {
        to.query.wwuid = from.query.wwuid
      }
      if (!to.query.shareUserId) {
        to.query.shareUserId = from.query.shareUserId
      }
      if (to.query.wwuid) {
        // var exp = new Date();
        // exp.setTime(exp.getTime() + 7 * 24 * 60 * 60 * 1000);//过期时间 7天
        // Cookies.set('wwuid', to.query.wwuid, { expires: exp })
        // Cookies.set('eid', to.query.eid, { expires: exp })
        next({
          path: to.path,
          query: to.query
        })
        // location.href = process.env.HOST_WECHAT_WEB + '/#' + to.fullPath + '&wwuid=' + to.query.wwuid
      } else if (to.query.shareUserId) {
        if (!is_weixn()) {
          next()
        } else {
          // 企业微信授权获取wwuid
          location.href = process.env.BASE_API + '/workWechatOauth2?eid=' + to.query.eid + '&waid=' + to.query.waid + '&r=' + encodeURIComponent(process.env.HOST_WECHAT_WEB + '/#' + to.fullPath)
          next(false)
        }
      } else {
        // 企业微信授权获取wwuid
        location.href = process.env.BASE_API + '/workWechatOauth2?eid=' + to.query.eid + '&waid=' + to.query.waid + '&r=' + encodeURIComponent(process.env.HOST_WECHAT_WEB + '/#' + to.fullPath)
        next(false)
      }
    } else {
      if (getQV('from') && getQV('from') == 'timeline' && !to.query.shareUserId) {
        // 来源于微工作台分享到朋友圈的特殊情况
        // 将当前的wwuid视为shareUserId，强制获取一次当前操作人的wwuid
        let shareWWuid = to.query.wwuid
        let fullPath = to.fullPath.replace('&wwuid=' + shareWWuid, '')
        location.href = process.env.BASE_API + '/workWechatOauth24WGZT?eid=' + to.query.eid + '&waid=' + to.query.waid + '&shareWWuid=' + shareWWuid + '&r=' + encodeURIComponent(process.env.HOST_WECHAT_WEB + '/#' + fullPath)
        next(false)
      } else {
        // var exp = new Date();
        // exp.setTime(exp.getTime() + 7 * 24 * 60 * 60 * 1000);//过期时间 7天
        // Cookies.set('wwuid', to.query.wwuid, { expires: exp })
        // Cookies.set('eid', to.query.eid, { expires: exp })
        next()
      }
    }
  }
});




/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  render: np => np(App)
})
